/**
 * @author zqd	差旅小组
 *
 * 上午10:50:58
 */
package com.cbts.dao;

import java.io.Serializable;
import java.util.List;


import com.cbts.util.Page;

public interface BaseDao<T> {
	
	
	/**
	 * 保存实体对象
	 * @param t 实体对象
	 * @return
	 */
	public boolean save(T t);
	
	/**
	 * 删除实体对象
	 * @param t 实体对象
	 * @return
	 */
	public boolean delete(T t);
	
	/**
	 * 通过id获得实体对象
	 * @param id	主键
	 * @return	实体对象
	 */
	public T get(Serializable id);
	
	/**
	 * 更新实体对象
	 * @param t	实体对象
	 * @return 
	 */
	public boolean update(T t);
	
	/**
	 * 通过参数查找
	 * @param wherehql
	 * @param values
	 * @param firstResult
	 * @param maxResult
	 * @return
	 */
	public Page<T> findByProperty(String wherehql,Object[] values,int firstResult,int maxResult);
	
	/**
	 * 通过参数查找唯一对象
	 * @param wherehql
	 * @param values
	 * @return
	 */
	public T queryUnique(String wherehql,Object[] values);
	
	/**
	 * 获得数量
	 * @param wherehql
	 * @param values
	 * @return
	 */
	public long getCount(String wherehql,Object[] values);
	
	/**
	 * 查找全部
	 * @return
	 */
	public Page<T> findAll();
	
	
	/**
	 * 应对多条数据插入
	 * @param list
	 * @return
	 */
	public boolean saveList(final List<T> list);
	
	/**
	 * 应对多条数据删除
	 * @param list
	 * @return
	 */
	public boolean deleteList(final List<T> list);
	
	/**
	 * 应对多条数据更新
	 * @param list
	 * @return
	 */
	public boolean updateList(final List<T> list);
	/**
	 * 插入或更新列表
	 */
	public boolean saveOrUpdate(final List<T> list);

	/**
	 * 按页查找全部，12-21，david
	 * @param pageNum
	 * @param maxResult
	 * @return
	 */
	public Page<T> findAllByPage(final int pageNum, final int maxResult);
}
